// Package layer_range_tree 1-102
// @Title layer_range_tree
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/16 13:48
// @Create  2021/9/16 13:48
package layer_range_tree

func LevelOrder(root *TreeNode) [][]int {
	// 特判，若根节点为空，直接return nil
	if root == nil {
		return nil
	}
	ans := make([][]int, 0)    // 二维数组存放最终结果集
	queue := []*TreeNode{root} // 创建一个伪队列，存放节点的指针
	for len(queue) > 0 {
		size := len(queue) // 获取当前队列的长度
		tempArr := []int{}
		for i := 0; i < size; i++ {
			// 出队
			cur := queue[0]   // 从队列左边取出一个元素
			queue = queue[1:] // 移除队列最左边的元素
			tempArr = append(tempArr, cur.Val)
			// 左孩子入队
			if cur.Left != nil {
				queue = append(queue, cur.Left)
			}
			// 右孩子入队
			if cur.Right != nil {
				queue = append(queue, cur.Right)
			}
		}
		ans = append(ans, tempArr)
	}
	return ans
}
